package com.qth.valet.payment;

import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAPublicKeyConfig;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 微信支付配置类
 * 用于管理微信支付相关的配置参数
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "wx.payment")
public class WxPaymentConfig {

    /**
     * 小程序AppId
     */
    private String appId;

    private String secret;

    /**
     * 商户号
     */
    private String mchId;

    /**
     * 商户API私钥路径
     */
    private String privateKeyPath;

    /**
     * 商户证书序列号
     */
    private String merchantSerialNumber;

    /**
     * 微信支付平台证书路径
     */
    private String wechatPayCertificatePath;

    /**
     * APIv3密钥
     */
    private String apiV3Key;

    /**
     * 微信支付公钥路径
     */
    private String wechatPayPublicKeyPath;

    /**
     * 微信支付公钥ID
     */
    private String publicKeyId;

    /**
     * 支付回调通知地址
     */
    private String notifyUrl;

    /**
     * 退款回调通知地址
     */
    private String refundNotifyUrl;

    /**
     * 微信支付API域名
     */
    private String domain = "https://api.mch.weixin.qq.com";

    /**
     * 连接超时时间（毫秒）
     */
    private int connectTimeout = 8000;

    /**
     * 读取超时时间（毫秒）
     */
    private int readTimeout = 10000;

    /**
     * 是否为沙箱环境
     */
    private Boolean sandbox = false;

    /**
     * 创建微信支付配置实例
     * 使用微信支付公钥模式
     */
    @Bean
    public Config config() {
        return new RSAPublicKeyConfig.Builder()
                .merchantId(this.mchId)
                .privateKeyFromPath(this.privateKeyPath)
                .publicKeyFromPath(this.wechatPayPublicKeyPath)
                .publicKeyId(this.publicKeyId)
                .merchantSerialNumber(this.merchantSerialNumber)
                .apiV3Key(this.apiV3Key)
                .build();
    }
}
